package work.jame.blog.service;

import work.jame.blog.framework.result.PageResult;
import work.jame.blog.pojo.Article;
import com.baomidou.mybatisplus.extension.service.IService;
import work.jame.blog.pojo.dto.ArticleDTO;
import work.jame.blog.pojo.vo.ArticleDetailVO;
import work.jame.blog.pojo.vo.ArticleSynopsisVO;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author Jame
 * @since 2023-05-17
 */
public interface ArticleService extends IService<Article> {

    /**
     * 发布文章
     *
     * @param articleDTO articleDTO
     * @return 发布完成的文章id
     */
    Long publish(ArticleDTO articleDTO);


    /**
     * 根据文章id获取详情
     *
     * @param articleId 文章id
     * @return articleVO
     */
    ArticleDetailVO getArticleDetail(Long articleId);

    /**
     * 查询文章发布者是否为这个用户
     *
     * @param articleId 文章id
     * @param userId    用户id
     * @return 文章发布者是否为这个用户
     */
    boolean queryArticlePublishIsThisUser(Long articleId, Long userId);


    /**
     * 根据id查询作者id
     *
     * @param articleId 文章id
     * @return 作者id
     */
    Long queryPublisherIdByArticleId(Long articleId);


    /**
     * 查询首页文章介绍
     *
     * @param articleTitle 文章标题
     * @param pageNumber   页数
     * @param pageSize     页大小
     * @param orderRule    排序规则 1根据发布时间 2根据阅读数量 3根据点赞数量 4根据投喂米粒数量
     * @return list
     */
    PageResult<ArticleSynopsisVO> queryHomeArticleSynopsis(String articleTitle, Long pageNumber, Long pageSize, int orderRule);

    /**
     * 查询首页文章介绍
     *
     * @param pageNumber   页数
     * @param pageSize     页大小
     * @param orderRule    排序规则 1根据发布时间 2根据阅读数量 3根据点赞数量 4根据投喂米粒数量
     * @return list
     */
    PageResult<ArticleSynopsisVO> queryHomeArticleSynopsis( Long pageNumber, Long pageSize, int orderRule);

}
